package com.mdd.admin.service.order;

import com.mdd.admin.validate.common.PageParam;
import com.mdd.admin.validate.order.OrderParam;
import com.mdd.admin.vo.order.OrderListVo;
import com.mdd.admin.vo.order.OrderDetailVo;
import com.mdd.admin.vo.order.OrderLogListVo;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.course.CourseColumn;
import com.mdd.common.entity.order.Order;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 订单服务接口类
 * @author panweiliang
 */
public interface IOrderService {

    /**
     * 订单列表
     *
     * @author panweiliang
     * @param pageParam 分页参数
     * @param params 搜索参数
     * @return PageResult<OrderVo>
     */
    PageResult<OrderListVo> list(PageParam pageParam, Map<String, String> params);


    /**
     * 订单不同状态个数
     *
     * @author panweiliang
     * @return Map<String, Object>
     */
    Map<String, Object> count();

    /**
     * 订单列表
     *
     * @author panweiliang
     * @param orderId 订单id
     * @return List<OrderLogListVo>
     */
    List<OrderLogListVo> listLog(Integer orderId);

    /**
     * 订单详情
     *
     * @author panweiliang
     * @param id 主键ID
     * @return Order
     */
    OrderDetailVo detail(Integer id);

    /**
     * 订单新增
     *
     * @author panweiliang
     * @param orderParam 参数
     */
    void add(OrderParam orderParam);

    /**
     * 订单编辑
     *
     * @author panweiliang
     * @param orderParam 参数
     */
    void edit(OrderParam orderParam);

    /**
     * 订单删除
     *
     * @author panweiliang
     * @param id 主键ID
     */
    void del(Integer id);

    /**
     * 取消订单
     *
     * @author panweiliang
     * @param id 主键ID
     */
    void cancel(Integer id);


    /**
     * 更改商家备注
     *
     * @param orderParam
     */
    Order changeShopRemark(OrderParam orderParam);

    Map<String, Object> getOrderStatistic();

    List<Map<String, BigDecimal>> getSalesAmountFromPast7days();

    BigDecimal getSalesAmount(Long start, Long end);

    Long getSalesOrderCount(Long start, Long end);

    /**
     * 关闭超时未支付的订单
     */
    void closeOvertimeOrders();

}
